home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Micro on the Apple Volume 2 (1981)(Micro Ink).zip / Micro on the Apple Volume 2 (1981)(Micro Ink).do / FNPLOTTER.bas < prev    next >
BASIC Source File  |  1996-12-24  |  5KB  |  185 lines

  1. 10  REM  ************************
  2. 12  REM  *                      *
  3. 14  REM  *   FUNCTION PLOTTER   *
  4. 16  REM  *    DAVID P. ALLEN    *
  5. 18  REM  *                      *
  6. 20  REM  *       FNPLOTTER      *
  7. 22  REM  *                      *
  8. 24  REM  *  COPYRIGHT (C) 1981  *
  9. 26  REM  *   MICRO INK, INC.    *
  10. 28  REM  * CHELMSFORD, MA 01824 *
  11. 30  REM  *  ALL RIGHTS RESERVED *
  12. 32  REM  *                      *
  13. 34  REM  ************************
  14. 140  REM 
  15. 150  REM 
  16. 180  REM  THIS PROGRAM PLOTS A
  17. 190  REM  CURVE FOR ANY EXPRESSION     
  18. 200  REM  AS A FUNCTION OF INCREAS-
  19. 210  REM  ING ANGLE FROM 1 TO 360
  20. 220  REM  DEGREES.
  21. 230  REM  CHANGE LINE 1010 TO A 
  22. 240  REM  FUNCTION YOU WISH TO 
  23. 250  REM  PLOT.
  24. 260  REM 
  25. 270  REM 
  26. 280  REM  *** DEFINE FUNCTIONS ***
  27. 290  REM  
  28. 300  DEF  FN SCH(X) = 2/( EXP(X) + EXP( -X)): REM  SECH(X)
  29. 310  DEF  FN CCH(X) = 2/( EXP(X) - EXP( -X)): REM  CSCH (X)
  30. 320  DEF  FN CTH(X) =  EXP( -X)/( EXP(X) - EXP( -X)) *2 +1: REM  COTH(X)
  31. 330  DEF  FN SEC(X) = 1/ COS(X): DEF  FN CSC(X) = 1/ SIN(X): DEF  FN COT(X) = 1/ TAN(X)
  32. 340  DEF  FN SNH(X) = ( EXP(X) - EXP( -X))/2: REM  SINH(X)
  33. 350  DEF  FN COH(X) = ( EXP(X) + EXP( -X))/2: REM  COSH(X)
  34. 360  DEF  FN TAH(X) =  - EXP( -X)/( EXP(X) + EXP( -X)) *2 +1: REM  TANH(X)
  35. 370  REM 
  36. 380  REM 
  37. 390  REM  ** PLOT GRAPH AXES **
  38. 400  REM 
  39. 410  HOME 
  40. 420  REM 
  41. 430  REM  MOVE CURSOR TO BOTTOM
  42. 440  REM  LINE.
  43. 450  REM 
  44. 460  VTAB 24
  45. 470  REM 
  46. 480  HGR 
  47. 490  HCOLOR= 7
  48. 500  HPLOT 0,80 TO 279,80
  49. 510  HPLOT 0,16 TO 0,143
  50. 520  FOR I = 0 TO 279  STEP 70
  51. 530  HPLOT I,78 TO I,82: HPLOT 279,78 TO 279,82
  52. 540  NEXT I
  53. 550  FOR I = 16 TO 144  STEP 16
  54. 560  HPLOT 0,I TO 4,I
  55. 570  NEXT I
  56. 580  REM  
  57. 590  REM  FLAGS FOR FIRST PLOT
  58. 600  REM  AND SCALE.
  59. 610  REM 
  60. 620 F = 0:G = 0
  61. 630  REM 
  62. 640  REM  R1 AND R2 MAY BE SET
  63. 650  REM  FOR OTHER LIMITS.
  64. 660  REM 
  65. 670 R1 = 1:R2 = 360
  66. 680  REM 
  67. 690  REM 
  68. 700  REM  ** BEGIN PLOT **
  69. 710  REM 
  70. 720  REM  CHANGE STEP FOR MORE
  71. 730  REM  OR LESS RESOLUTION.
  72. 740  REM  IF R1>R2 THEN STEP
  73. 750  REM  MUST BE NEGATIVE.
  74. 760  REM 
  75. 770  FOR I = R1 TO R2  STEP 5
  76. 780  REM 
  77. 790  REM  NEXT 3 STEPS ESTABLISH
  78. 800  REM  HORIZONTAL SCALE.
  79. 810  REM 
  80. 820  IF  ABS(R1) > =  ABS(R2)  THEN R =  ABS(R1)
  81. 830  IF  ABS(R2) > =  ABS(R1)  THEN R =  ABS(R2)
  82. 840  IF G = 0  THEN S = 70 *4/R:G = 1
  83. 850 X = I:Y = 0
  84. 860  REM 
  85. 870  REM  CONVERTS DEGREES TO 
  86. 880  REM  RADIANS.
  87. 890  REM 
  88. 900 X = X *3.14159/180
  89. 910  REM 
  90. 920  REM  PREVENTS CRASHING WHEN
  91. 930  REM  X=0.
  92. 940  REM 
  93. 950  IF X = 0  THEN X = .00001
  94. 960  REM 
  95. 970  REM 
  96. 980  REM  NEXT LINE DESCRIBES
  97. 990  REM  FUNCTION TO BE PLOTTED
  98. 1000  REM 
  99. 1010 Y1 =  SIN(X) + COS(2 *X)
  100. 1020 Y = Y +Y1
  101. 1030 Y = Y *20
  102. 1040  REM 
  103. 1050  REM  SCALES X
  104. 1060  REM 
  105. 1070 X = I *S
  106. 1080  REM 
  107. 1090  REM  RELATES PLOT TO X AXIS
  108. 1100  REM 
  109. 1110 Y =  -Y +80
  110. 1120  REM 
  111. 1130  REM  SUBROUTINE PREVENTS
  112. 1140  REM  OFF-SCALE CRASHING.
  113. 1150  REM 
  114. 1160  GOSUB 1830
  115. 1170  REM 
  116. 1180  REM  PLOTS FIRST POINT.
  117. 1190  REM 
  118. 1200  IF F = 0  THEN  HPLOT X,Y:F = 1
  119. 1210  HPLOT  TO X,Y
  120. 1220  NEXT I
  121. 1230  PRINT : LIST 1010
  122. 1240  REM 
  123. 1250  REM  BLANKS OUT LINE #
  124. 1260  REM  AFTER LISTING
  125. 1270  REM  LINE 1010.
  126. 1280  REM 
  127. 1290  POKE 1616,160: POKE 1617,160: POKE 1618,160: POKE 1619,160
  128. 1300  REM 
  129. 1310  REM  WAITING FOR YOUR PLEASURE!
  130. 1320  REM  PUNCH 'RETURN'
  131. 1330  REM  TO CONTINUE!
  132. 1340  REM 
  133. 1350  POKE  -16368,0: WAIT  -16384,128
  134. 1360  REM 
  135. 1370  REM 
  136. 1380  REM  THROWS PREVIOUS KEYSTROKE
  137. 1390  REM  AWAY WITH
  138. 1400  REM  'GET Z$'!
  139. 1410  REM 
  140. 1420  GET Z$
  141. 1430  REM 
  142. 1440  REM  CLEAR SCREEN AND
  143. 1450  REM  PRINT FUNCTIONS FOR
  144. 1460  REM  REMINDER.
  145. 1470  REM 
  146. 1480  TEXT : HOME 
  147. 1490  PRINT  TAB( 9);"SECANT = FN SEC(X)"
  148. 1500  PRINT  TAB( 9);"COSEC = FN CSC(X)"
  149. 1510  PRINT  TAB( 9);"COTAN = FN COTAN(X)"
  150. 1520  PRINT  TAB( 9);"SINH = FN SNH(X)"
  151. 1530  PRINT  TAB( 9);"COSH = FN COH(X)"
  152. 1540  PRINT  TAB( 9);"TANH = FN TAH(X)"
  153. 1550  PRINT  TAB( 9);"SECH = FN SCH(X)"
  154. 1560  PRINT  TAB( 9);"CSCH = FN CCH(X)"
  155. 1570  PRINT  TAB( 9);"COTH = FN CTH(X)"
  156. 1580  REM 
  157. 1590  REM  NOW WE SET UP LINE
  158. 1600  REM  1010 FOR EDITING.
  159. 1610  REM  'POKE 32, 2' MOVES
  160. 1620  REM  MARGIN SO CURSOR CAN
  161. 1630  REM  FIT IN FRONT.
  162. 1640  REM 
  163. 1650  VTAB (12)
  164. 1660  PRINT " CHANGE LINE 1010 AS DESIRED AND"
  165. 1670  PRINT "RUN AGAIN!"
  166. 1680  POKE 32,2
  167. 1690  LIST 1010
  168. 1700  REM 
  169. 1710  REM  NOW WE RESTORE MARGIN
  170. 1720  REM  AND MOVE CURSOR IN
  171. 1730  REM  FRONT OF LINE #.
  172. 1740  REM 
  173. 1750  POKE 32,0
  174. 1760  POKE 37,13: POKE 36,0
  175. 1770  REM 
  176. 1780  END 
  177. 1790  REM  
  178. 1800  REM  SCALE ANTI-CRASHING
  179. 1810  REM  SUBROUTINE.
  180. 1820  REM 
  181. 1830  IF X <0  THEN X = 0
  182. 1840  IF X >279  THEN X = 279
  183. 1850  IF Y <0  THEN Y = 0
  184. 1860  IF Y >159  THEN Y = 159
  185. 1870  RETURN